package cn.wolfcode.shop.mapper;

import cn.wolfcode.shop.domain.Good;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectProvider;
import org.springframework.util.CollectionUtils;

import java.lang.reflect.Type;
import java.util.Collections;
import java.util.List;
import java.util.Set;

@Mapper
public interface GoodServiceMapper {

    // 复杂的 SQL 语句注解方式比较麻烦
    @SelectProvider(type = GoodServiceProvider.class, method = "selectGoodListByIds")
    List<Good> selectGoodListByIds(@Param("ids") Set<Long> ids);

    // 内部类实现查询 SQL 的拼接
    class GoodServiceProvider {
        // 返回的应该是 String ， 它是 SQL 语句
        public String selectGoodListByIds(@Param("ids") Set<Long> ids) {
            StringBuilder sql = new StringBuilder(100);
            sql.append("SELECT * FROM t_goods");

            if (CollectionUtils.isEmpty(ids))
                return sql.toString(); // 没有 id SQL是: select * from t_goods
            // 有内容 ：SQL 后面跟上 WHERE id IN (1,2,3)
            sql.append(" WHERE id IN (");   // 注意前面的空格

            for (Long id : ids) {
                sql.append(id).append(",");
            }
            // 去掉最后一个逗号
            sql.deleteCharAt(sql.length() - 1);
            // 最后右半边括号
            sql.append(")");
            return sql.toString();
        }
    }
}
